data(birthwt,package="MASS")
head(birthwt)
## low age lwt race smoke ptl ht ui ftv bwt
## 85 0 19 182 2 0 0 0 1 0 2523
## 86 0 33 155 3 0 0 0 0 3 2551
## 87 0 20 105 1 1 0 0 0 1 2557
## 88 0 21 108 1 1 0 0 1 2 2594
## 89 0 18 107 1 1 0 0 1 0 2600
## 91 0 21 124 3 0 0 0 0 0 2622
xtabs
関数でモデル式で多次元分割表を作成できる。
モデル式を~ x1 + x2 + ...
とすることで、右辺の変数に関する多次元分割表に基づく度数を集計する。
n <- xtabs(~smoke+race+low,birthwt)
n
## , , low = 0
##
## race
## smoke 1 2 3
## 0 40 11 35
## 1 33 4 7
##
## , , low = 1
##
## race
## smoke 1 2 3
## 0 4 5 20
## 1 19 6 5
モデル式をy ~ x1 + x2 + ...
とすることで、右辺の変数に関する多次元分割表に基づく左辺の変数の合計を集計する。
sum <- xtabs(bwt~smoke+race+low,birthwt)
sum
## , , low = 0
##
## race
## smoke 1 2 3
## 0 143309 34923 113721
## 1 105397 12354 23080
##
## , , low = 1
##
## race
## smoke 1 2 3
## 0 7556 10749 41147
## 1 41599 12686 10006
これらを組み合わせれば、平均値も計算できる
m <- sum/n
m
## , , low = 0
##
## race
## smoke 1 2 3
## 0 3582.725 3174.818 3249.171
## 1 3193.848 3088.500 3297.143
##
## , , low = 1
##
## race
## smoke 1 2 3
## 0 1889.000 2149.800 2057.350
## 1 2189.421 2114.333 2001.200
多次元分割表は複数のクロス集計表として表示される。ftable
関数でピボットテーブルのような入れ子状の表に変換される。
ftable(m)
## low 0 1
## smoke race
## 0 1 3582.725 1889.000
## 2 3174.818 2149.800
## 3 3249.171 2057.350
## 1 1 3193.848 2189.421
## 2 3088.500 2114.333
## 3 3297.143 2001.200
table属性の表の行名row.vars
と列名col.vars
を指定することから作成することもできる。
ftable(Titanic,row.vars=c("Class","Sex"),col.vars="Survived")
## Survived No Yes
## Class Sex
## 1st Male 118 62
## Female 4 141
## 2nd Male 154 25
## Female 13 93
## 3rd Male 422 88
## Female 106 90
## Crew Male 670 192
## Female 3 20